#ifndef __Acceptor_hpp__
#define __Acceptor_hpp__

#include "InetAddress.hpp"
#include "Socket.hpp"

namespace xww
{

class Acceptor
{
public:
    Acceptor(unsigned short port,const string & ip = "0.0.0.0");
    ~Acceptor(){}

    void ready();//准备工作，设置地址可重用，绑定地址，监听端口

    int accept();//接受连接请求
                 //返回一个新的TcpConnection对象

private:
    void setReuseAddr(bool);//设置网络地址可以重用
    void setReusePort(bool);//设置端口可以重用
    void bind();//绑定地址
    void listen();//开始监听

private:
    InetAddress _addr; //InetAddress类用于存储IP地址和端口号
    Socket _sock;// Socket类用于封装socket文件描述符
                   //Acceptor对象不能被复制，所以Socket也不能被复制
                   //因为Acceptor对象的生命周期管理Socket对象的生命周期
};

}// end of namespace xww

#endif